<script setup>
import {computed, onMounted, onUnmounted, ref} from "vue";
import {useRoute, useRouter} from "vue-router";
import {UserSessionStorage} from "@/stores/common.js";
import axios from "axios";


const route = useRoute();
const router = useRouter();
const userStorage = UserSessionStorage();

const shopId = ref(
    route.query.shopId
)
const shop = ref({})
const foodArr = ref([])
const user = ref({})
const order=ref({})
const cartArr=ref([])
onMounted(() => {
  user.value = userStorage.getSessionStorage('user');

  //根据shopId查询门店信息
  axios.get(`shop/get?id=${shopId.value}`).then(response => {
    //shop信息存储
    shop.value = response.data;
  }).catch(error => {
    console.error(error);
  });
  //根据shopId查询所属食品信息
  axios.get(`item/getItemsByShopId?shop_id=${shopId.value}`).then(response => {
    foodArr.value = response.data.data.items;
    for (let i = 0; i < foodArr.value.length; i++) {
      foodArr.value[i].quantity = 0;
    }

    //如果已登录，那么需要去查询购物车中是否已经选购了某个食品
    if (user.value != null) {
      listCustomerOrder();
    }
  }).catch(error => {
    console.error(error);
  });
})
//根据用户id查询未支付订单
function listCustomerOrder() {
  axios.get(`customerOrder/getCustomerOrderByCustomerIdAndShopId?cus_id=${user.value.id}&shop_id=${shopId.value}`).then(response => {
    //获取到订单信息
     order.value=response.data.data.customerOrder;
     //根据订单id获取订单详情
    getUserLineItem()
  }).catch(error => {
    console.error(error);
  });
}
function getUserLineItem(){
  axios.get(`lineItem/getLineItemsByCustomerOrderId?cus_order_id=${order.value.id}`).then(response=>{
    cartArr.value = response.data.data.lineItems;
    //遍历所有食品列表
    for (let foodItem of foodArr.value) {
      foodItem.quantity = 0;
      for (let cartItem of cartArr.value) {
        if (cartItem.id === foodItem.id) {
          foodItem.quantity = cartItem.quantity;
        }
      }
    }
    foodArr.value.sort();
  })
}
function minus(index) {
  //首先做登录验证
  if (user.value == null) {
    router.push({
      path: '/login'
    });
    return;
  }
  if (foodArr.value[index].quantity > 1) {
    //做update
    updateCart(index, -1);
  } else {
    //做delete
    removeCart(index);
  }
}

function add(index) {
  //首先做登录验证
  if (user.value == null) {
    router.push({
      path: '/login'
    });
    return;
  }
  if (foodArr.value[index].quantity === 0) {
    //做insert
    savaCart(index);
  } else {
    //做update
    updateCart(index, 1);
  }
}

function savaCart(index) {
  axios.put('cart/saveCart', CartSaveForm.value).then(response => {
    if (response.data.code === 200) {
      //此食品数量要更新为1；
      foodArr.value[index].quantity = 1;
      foodArr.value.sort();
    } else {
      alert('向购物车中添加食品失败！');
    }
  }).catch(error => {
    console.error(error);
  });
}

function updateCart(index, num) {
  CartUpdateForm.value.quantity=foodArr.value[index].quantity + num
  axios.post('cart/updateCart', CartUpdateForm.value).then(response => {
    if (response.data.code === 200) {
      //此食品数量要更新为1或-1；
      foodArr.value[index].quantity += num;
      foodArr.value.sort();
    } else {
      alert('向购物车中更新食品失败！');
    }
  }).catch(error => {
    console.error(error);
  });
}

function removeCart(index) {
  axios.post(`cart/removeCart?cartId=${cartId.value}`).then(response => {
    if (response.data.code !== 200) {
      //此食品数量要更新为0；视图的减号和数量要消失
      foodArr.value[index].quantity = 0;
      foodArr.value.sort();
    } else {
      alert('从购物车中删除食品失败！');
    }
  }).catch(error => {
    console.error(error);
  });
}

function toOrder() {
  router.push({
    path: '/customer/payment',
    query: {
      orderId: order.value.id
    }
  });
}

// 总价格的计算属性
const totalPrice = computed(() => {
  let total = 0;
  for (let item of foodArr.value) {
    total += item.actPrice * item.quantity;
  }
  return total;
});

// 总数量的计算属性
const totalQuantity = computed(() => {
  let quantity = 0;
  for (let item of foodArr.value) {
    quantity += item.quantity;
  }
  return quantity;
});

// 总结算价格的计算属性
const totalSettle = computed(() => {
  return totalPrice.value
});
</script>

<template>

  <div class="wrapper">
    <!-- header部分 -->
    <header>
      <p>商家信息</p>
    </header>
    <!-- 商家logo部分 -->
    <div class="business-logo">
     <img  src="@/assets/Business/ynu.png">
    </div>
    <!-- 商家信息部分 -->
    <div class="business-info">
      <h1>{{ shop.shopName }}</h1>
      创建时间<p>{{ shop.createTime }}</p>
    </div>
    <!-- 食品列表部分 -->
    <ul class="food">
      <li v-for="(item,index) in foodArr">
        <div class="food-left">
          <div class="food-left-info">
            <h3>{{ item.itemName }}</h3>
            <p>&#165;{{ item.actPrice }}</p>
          </div>
        </div>
        <div class="food-right">
          <div>
            <i class="fa fa-minus-circle" @click="minus(index)" v-show="item.quantity!==0"></i>
          </div>
          <p><span v-show="item.quantity!==0">{{ item.quantity }}</span></p>
          <div>
            <i class="fa fa-plus-circle" @click="add(index)"></i>
          </div>
        </div>
      </li>
    </ul>
    <!-- 购物车部分 -->
    <div class="cart">
      <div class="cart-left">
        <div class="cart-left-icon" :style="totalQuantity===0?'background-color:#505051;':'background-color:#3190E8;'">
          <i class="fa fa-shopping-cart"></i>
          <div class="cart-left-icon-quantity" v-show="totalQuantity!==0">
            {{ totalQuantity }}
          </div>
        </div>
        <div class="cart-left-info">
          <p>&#165;{{ totalPrice }}</p>
          <p>另需配送费{{ shop.deliveryPrice }}元</p>
        </div>
      </div>
      <div class="cart-right">
        <!-- 不够起送费 -->
        <!-- 达到起送费 -->
        <div class="cart-right-item" @click="toOrder" >
          去支付
        </div>
      </div>
    </div>
  </div>
</template>

<style scoped>
/****************** 总容器 ******************/
.wrapper {
  width: 100%;
  height: 100%;
}

/****************** header部分 ******************/
.wrapper header {
  width: 100%;
  height: 12vw;
  background-color: #0097FF;
  color: #fff;
  font-size: 4.8vw;
  position: fixed;
  left: 0;
  top: 0;
  z-index: 1000;
  display: flex;
  justify-content: center;
  align-items: center;
}

/****************** 商家logo部分 ******************/
.wrapper .business-logo {
  width: 100%;
  height: 35vw;
  /*使用上外边距避开header部分*/
  margin-top: 12vw;
  display: flex;
  justify-content: center;
  align-items: center;
}

.wrapper .business-logo img {
  width: 40vw;
  height: 30vw;
  border-radius: 5px;
}

/****************** 商家信息部分 ******************/
.wrapper .business-info {
  width: 100%;
  height: 20vw;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

.wrapper .business-info h1 {
  font-size: 5vw;
}

.wrapper .business-info p {
  font-size: 3vw;
  color: #666;
  margin-top: 1vw;
}

/****************** 食品列表部分 ******************/
.wrapper .food {
  width: 100%;
  /*使用下外边距避开footer部分*/
  margin-bottom: 14vw;
}

.wrapper .food li {
  width: 100%;
  box-sizing: border-box;
  padding: 2.5vw;
  user-select: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.wrapper .food li .food-left {
  display: flex;
  align-items: center;
}

.wrapper .food li .food-left img {
  width: 20vw;
  height: 20vw;
}

.wrapper .food li .food-left .food-left-info {
  margin-left: 3vw;
}

.wrapper .food li .food-left .food-left-info h3 {
  font-size: 3.8vw;
  color: #555;
}

.wrapper .food li .food-left .food-left-info p {
  font-size: 3vw;
  color: #888;
  margin-top: 2vw;
}

.wrapper .food li .food-right {
  width: 16vw;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.wrapper .food li .food-right .fa-minus-circle {
  font-size: 5.5vw;
  color: #999;
  cursor: pointer;
}

.wrapper .food li .food-right p {
  font-size: 3.6vw;
  color: #333;
}

.wrapper .food li .food-right .fa-plus-circle {
  font-size: 5.5vw;
  color: #0097EF;
  cursor: pointer;
}

/****************** 购物车部分 ******************/
.wrapper .cart {
  width: 100%;
  height: 14vw;
  position: fixed;
  left: 0;
  bottom: 0;
  display: flex;
}

.wrapper .cart .cart-left {
  flex: 2;
  background-color: #505051;
  display: flex;
}

.wrapper .cart .cart-left .cart-left-icon {
  width: 16vw;
  height: 16vw;
  box-sizing: border-box;
  border: solid 1.6vw #444;
  border-radius: 8vw;
  background-color: #3190E8;
  font-size: 7vw;
  color: #fff;
  display: flex;
  justify-content: center;
  align-items: center;
  margin-top: -4vw;
  margin-left: 3vw;
  position: relative;
}

.wrapper .cart .cart-left .cart-left-icon-quantity {
  width: 5vw;
  height: 5vw;
  border-radius: 2.5vw;
  background-color: red;
  color: #fff;
  font-size: 3.6vw;
  display: flex;
  justify-content: center;
  align-items: center;
  position: absolute;
  right: -1.5vw;
  top: -1.5vw;
}

.wrapper .cart .cart-left .cart-left-info p:first-child {
  font-size: 4.5vw;
  color: #fff;
  margin-top: 1vw;
}

.wrapper .cart .cart-left .cart-left-info p:last-child {
  font-size: 2.8vw;
  color: #AAA;
}

.wrapper .cart .cart-right {
  flex: 1;
}

/*达到起送费时的样式*/
.wrapper .cart .cart-right .cart-right-item {
  width: 100%;
  height: 100%;
  background-color: #38CA73;
  color: #fff;
  font-size: 4.5vw;
  font-weight: 700;
  user-select: none;
  cursor: pointer;
  display: flex;

  justify-content: center;
  align-items: center;
}

/*不够起送费时的样式（只有背景色和鼠标样式的区别）*/
/*
.wrapper .cart .cart-right .cart-right-item{
width: 100%;
height: 100%;
background-color: #535356;
color: #fff;
font-size: 4.5vw;
font-weight: 700;
user-select: none;

display: flex;
justify-content: center;
align-items: center;
}
*/
</style>
